// utils/socket.js
import io from '@hyoga/uni-socket.io';
// import io from 'socket.io-client';
import store from '@/store/index.js';
import api from '@/config/api.js'


// 您的NestJS服务端地址
const SOCKET_SERVER_URL = api.buyer;


class SocketService {
	constructor() {
		this.socket = null;
		this.isConnected = false;
	}

	// 初始化并连接Socket
	connect(userId, friendId) {
		if (this.socket) {
			return this.socket;
		}
		this.socket = io(SOCKET_SERVER_URL, {
			query: {
				userId,
				friendId
			},
			transports: ['websocket'],
			timeout: 5000,
			path: '/chat/socket.io'
		});



		// 监听连接事件
		this.socket.on('connect', () => {
			console.log('Socket连接成功 - ID:', this.socket.id);
			this.isConnected = true;
			uni.$emit('SOCKET_CONNECTED');
		});

		this.socket.on('disconnect', (reason) => {
			console.warn('Socket连接断开:', reason);
			this.isConnected = false;
			uni.$emit('SOCKET_DISCONNECTED');
		});

		this.socket.on('error', (error) => {
			console.error('Socket错误:', error);
			uni.$emit('SOCKET_ERROR', error);
		});

		this.socket.on('reconnect', (attemptNumber) => {
			console.log('Socket重连成功，尝试次数:', attemptNumber);
		});

		// 自定义事件

		// 连接成功
		// this.socket.on('linkSuccess', res => {
		// 	console.log("给用户发送的数据", res)
		// })

		// 聊天房间中的数据
		this.socket.on('friendMessage', res => {
			console.log("聊天房间中有数据发送")
			// 将聊天消息存到数据库中，发送friendMessage事件
			// 返回消息数据，然后将消息数据添加到列表中
			store.commit('pushMessage', res.data)
		})


		return this.socket;
	}

	// 监听服务端事件
	on(eventName, callback) {
		if (this.socket) {
			this.socket.on(eventName, callback);
		}
	}

	// 向服务端发送事件
	emit(eventName, data) {
		if (this.socket && this.isConnected) {
			this.socket.emit(eventName, data);
		} else {
			console.error('Socket未连接，无法发送消息', eventName);
			// 可以根据需要在这里尝试重连或提示用户
		}
	}

	// 断开连接
	disconnect() {
		if (this.socket) {
			this.socket.close();
			this.socket = null;
			this.isConnected = false;
		}
	}
}

// 创建并导出一个单例
const socketService = new SocketService();
export default socketService;